// ignore: import_of_legacy_library_into_null_safe
import 'package:flutter_track/base/base_copy.dart';
// import 'package:uuid/uuid.dart';

/// 理论上，用来进行两个isolate通讯的消息携带体
/// done 表示任务是否完成
/// msg 表示携带体中具备的信息
/// action 表示携带体应该需要做什么动作
/// exception 共用任务中，是否包含了某些错误？
///
/// uuid 消息携带体理论上用来恒定唯一的标准
class ActionMessage extends Copyable<ActionMessage> {
  String? msg;
  SendAction action;
  Exception? exception;

  /// 消息uuid
  String uuid;

  ActionMessage({
    required this.action,
    this.msg,
    this.exception,
    this.uuid = "",
  }) {
    // if (uuid.isEmpty) {
    //   uuid = Uuid().v4();
    // }
  }

  /// 内容拷贝
  @override
  ActionMessage copy() {
    return ActionMessage(
      action: action,
      msg: msg,
      exception: exception,
      uuid: uuid,
    );
  }
}

enum SendAction {
  /// 主isolate完成微小任务
  microTaskDone,

  /// 主isolate退出
  exit,

  /// tracker isolate完成任务
  sendDone,

  /// 发送微小任务
  sendMicroTask,

  /// 应该发送微小任务
  shouldSendMicroTask,

  trackTask,
}
